import java.util.PriorityQueue;
class Student1 {

}
public class Test {
    /**
     * 优先级队列
     * @param args
     * 2.优先级队列的模拟实现
     *      堆的插入与删除
     * 3.常用接口介绍
     * 4.堆的应用
     */
    public static void main4(String[] args) {
        /**
         * 堆的应用
         *      1.PriorityQueue的模拟实现
         *      2.堆排序
         *      3.topK问题
         */
    }
    /**
     * 常用接口介绍
     * @param args
     *      1.PriorityQueue常用特性
     *      2.PriorityQueue常用接口介绍
     */
    public static void main3(String[] args) {
        /**
         * 常用接口介绍:
         *      1.优先级队列的构造
         *      2.插入/删除/获取优先级最高的元素
         */
    }
    public static void main2(String[] args) {
        /**
         * 一般情况下使用PriorityQueue(线程不安全的),
         * 涉及多线程一般使用PriorityBlockingQueue(线程安全的)
         * 注意点:
         *      1.使用时需要导包
         *      2.PriorityQueue放置的类型必须是可以比较大小,
         *      否则会抛出ClassCastException异常
         *      3.不能插入null,否则会抛出NullException异常
         *      4.没有容量限制,可以插入任意多个元素,内部可以自动进行扩容
         *      5.插入和删除时间复杂度为O(log2N)
         *      6.PriorityQueue底层是使用堆数据结构
         *      7.PriorityQueue默认是小根堆,即每次poll()元素为树最小的元素
         */
        PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
        priorityQueue.offer(10);
        priorityQueue.offer(1);
        priorityQueue.offer(2);
        priorityQueue.offer(5);
        System.out.println(priorityQueue.poll());
        System.out.println(priorityQueue.poll());
//        PriorityQueue<Student1> priorityQueue = new PriorityQueue<>();
//        priorityQueue.offer(new Student1());//error
//        PriorityQueue<Student1> priorityQueue = new PriorityQueue<>();
//        priorityQueue.offer(null);//error
    }
    /**
     * 堆的插入与删除
     * @param args
     *      堆的插入->TestHeap offer()
     *      堆的删除->TestHeap poll()
     */
    public static void main(String[] args) {
        int[] array = { 27,15,19,18,28,34,65,49,25,37};
        TestHeap testHeap = new TestHeap();
        testHeap.initHeap(array);

        testHeap.createBigHeap();

//        testHeap.offer(80);
//        testHeap.offer(11);
//        System.out.println(testHeap.poll());


        testHeap.heapSort();
        System.out.println();
    }
}
